package com.innerclass.closepackage.demo2;

/**
 * 闭包在Javascript中用的比较多，Java不显式支持闭包，但对于非静态内部类而言，它记录了其外部类的详细信息，还保留了一个创建非静态内部类对象的引用
 * ，并且可以直接调用外部类的private成员，因此可以把非静态内部类当成面向对象领域的闭包。通过这种仿闭包的非静态内部类，可以很方便的实现回调，
 * 回调就是允许客户类通过内部类引用来调用其外部类的方法。
 * 假设有一个人，是一个程序员，又是一个IT培训师。也应是说需要定义一个特殊的类，既需要实现IT培训师的接口
 * ，也需要继承程序员父类，接口和父类都包含相同的work方法
 * ，需要在一个类中的work方法中，既包括接口的work,和父类的work.这个时候可以通过一个仿闭包的内部类实现这个功能
 * 
 * @author Administrator
 * 
 */
public class Test {

	public static void main(String[] args) {
		TeachableProgrammer tp = new TeachableProgrammer("某某");
		// 直接调用TeachableProgrammer类从Programmer类继承到的work方法
		tp.work();
		// 表面上调用的是Closure的work方法,实际上是回调TeachableProgrammer的teach方法
		tp.getCallbackReference().work();
	}

}
